package main

import (
	"fmt"

	//测试接口-路由
	ginCtrl "gin/TEST01/controller"
	sysService "gin/system/service"
	sysUtil "gin/system/util"
	"github.com/gin-gonic/gin"
	"log"
	commonLog "gin/common/log"
	//系统基础功能接口--路由
	sysCtrl "gin/system/controller"
	genService "gin/generator/service"
)

func main() {
	//日志记录
	logger := commonLog.InitLogger()
	// 记录一些示例操作日志
	logger.Println("golang-mysql----通用后台管理系统启动！！！！")

	apiV1 := gin.Default()
	exploreRouter := apiV1.Group("/api")


	//有数据库交互的接口
	////get请求 返回json
	exploreRouter.GET("/getJson", ginCtrl.GetUserInfo)

	////get请求 返回json 接口传参
	exploreRouter.GET("/getJson/:id", ginCtrl.GetUserInfo)

	////POST请求 返回json 接口传参json
	exploreRouter.POST("/postJson", ginCtrl.PostUserInfo)

	////异常捕获
	exploreRouter.GET("/getErr", ginCtrl.GetDb)

	////异常捕获
	exploreRouter.GET("/getDb", ginCtrl.GetDb)





	//TODO -------------------------------------system系统功能模块接口路由-登录相关接口----------------------------------
	//TODO 1.登录验证返回token 接口白名单，不校验是否携带token
	exploreRouter.POST("/login", sysCtrl.Login)

	//1.2 用户退出
	exploreRouter.POST("/logout", sysCtrl.Logout)


	//2密码生成 TODO 待后期改造成重置密码接口
	exploreRouter.POST("/rsapassword", sysCtrl.Rsapassword)

	//TODO -------------------------------------system系统功能模块接口路由-用户操作相关接口----------------------------------

	//8.4生成代码，及下载代码文件
	exploreRouter.GET("/tool/gen/batchGenCode", genService.BatchGenCode)

	exploreRouter.Use(sysUtil.AuthMiddleware()) //token验证中间件
	{
		//TODO 2.登录相关接口
		//登录之后，获取登录用户的，权限，菜单，角色，单位等详细信息
		exploreRouter.GET("/getInfo", sysService.FindByLoginUserDetail)

		//根据登录用户 的账号 userName 查询菜单
		exploreRouter.GET("/getRouters", sysService.GetRouters)


		//TODO 3.用户相关接口
		//3.1 用户查询列表
		exploreRouter.GET("/system/user/list", sysService.GetUserList)

		//TODO 4.部门管理相关接口
		//4.1部门列表接口
		exploreRouter.GET("system/dept/list", sysService.GetDeptList)

		//4.2 用户部门菜单树
		exploreRouter.GET("system/dept/treeselect", sysService.GetTreeselect)


		//TODO 5.角色管理相关接口
		//5.1角色列表接口
		exploreRouter.GET("system/role/list", sysService.GetRoleList)


		//TODO 6.菜单管理管理相关接口
		//6.1菜单列表接口
		exploreRouter.GET("system/menu/list", sysService.GetMenuList)


		//TODO 7.字典管理管理相关接口
		//7.1 字典列表接口
		exploreRouter.GET("system/dict/type/list", sysService.GetDictTypeList)

		//7.1.2 字典列表接口
		exploreRouter.GET("system/dict/type/:dictId", sysService.GetDictTypeByIdList)


		//7.2.1 字典键值相关列表接口
		exploreRouter.GET("system/dict/data/list", sysService.GetDictDataList)

		//7.2.2 根据字典类型查询字典数据信息
		exploreRouter.GET("system/dict/data/type/:dictType", sysService.GetDictDataTypeList)

		//TODO 8.代码生成相关代码
		//8.1 代码生成模块，列表
		exploreRouter.GET("tool/gen/list", genService.GetGenList)

		//8.2 代码生成  导入表，弹框查询表
		exploreRouter.GET("/tool/gen/db/list", genService.GetGenDbList)

		//8.3 导入表，弹框查询表
		exploreRouter.POST("/tool/gen/importTable", genService.ImportTable)



		//POST请求 db操作，新增数据
		exploreRouter.POST("/addDb", sysCtrl.SaveUser)

		//GET请求 db操作，按id查询数据
		exploreRouter.GET("/getByIdDb", sysCtrl.GetUserById)

		//GET请求 db操作，查询数据
		exploreRouter.GET("/getByUserList", sysCtrl.GetByUserList)

		//GET请求 db多表orm操作，查询数据
		exploreRouter.GET("/getByUserJoinList", sysCtrl.GetByUserJoinList)
	}


	// 或者 设置debug模式
	gin.SetMode(gin.DebugMode)

	err := apiV1.Run(":9999")
	if err != nil {
		log.Fatalln("服务启动失败，原因：", err)
	} else {
		fmt.Println("服务启动成功，后端接口请访问 127.0.0.1:9999")
	}
}
